{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:48:03.329431900Z",
     "start_time": "2024-01-12T13:47:56.895366300Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import svm\n",
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [
    {
     "data": {
      "text/plain": "       label  pixel0  pixel1  pixel2  pixel3  pixel4  pixel5  pixel6  pixel7  \\\n0          1       0       0       0       0       0       0       0       0   \n1          0       0       0       0       0       0       0       0       0   \n2          1       0       0       0       0       0       0       0       0   \n3          4       0       0       0       0       0       0       0       0   \n4          0       0       0       0       0       0       0       0       0   \n...      ...     ...     ...     ...     ...     ...     ...     ...     ...   \n41995      0       0       0       0       0       0       0       0       0   \n41996      1       0       0       0       0       0       0       0       0   \n41997      7       0       0       0       0       0       0       0       0   \n41998      6       0       0       0       0       0       0       0       0   \n41999      9       0       0       0       0       0       0       0       0   \n\n       pixel8  ...  pixel774  pixel775  pixel776  pixel777  pixel778  \\\n0           0  ...         0         0         0         0         0   \n1           0  ...         0         0         0         0         0   \n2           0  ...         0         0         0         0         0   \n3           0  ...         0         0         0         0         0   \n4           0  ...         0         0         0         0         0   \n...       ...  ...       ...       ...       ...       ...       ...   \n41995       0  ...         0         0         0         0         0   \n41996       0  ...         0         0         0         0         0   \n41997       0  ...         0         0         0         0         0   \n41998       0  ...         0         0         0         0         0   \n41999       0  ...         0         0         0         0         0   \n\n       pixel779  pixel780  pixel781  pixel782  pixel783  \n0             0         0         0         0         0  \n1             0         0         0         0         0  \n2             0         0         0         0         0  \n3             0         0         0         0         0  \n4             0         0         0         0         0  \n...         ...       ...       ...       ...       ...  \n41995         0         0         0         0         0  \n41996         0         0         0         0         0  \n41997         0         0         0         0         0  \n41998         0         0         0         0         0  \n41999         0         0         0         0         0  \n\n[42000 rows x 785 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>label</th>\n      <th>pixel0</th>\n      <th>pixel1</th>\n      <th>pixel2</th>\n      <th>pixel3</th>\n      <th>pixel4</th>\n      <th>pixel5</th>\n      <th>pixel6</th>\n      <th>pixel7</th>\n      <th>pixel8</th>\n      <th>...</th>\n      <th>pixel774</th>\n      <th>pixel775</th>\n      <th>pixel776</th>\n      <th>pixel777</th>\n      <th>pixel778</th>\n      <th>pixel779</th>\n      <th>pixel780</th>\n      <th>pixel781</th>\n      <th>pixel782</th>\n      <th>pixel783</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>41995</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>41996</th>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>41997</th>\n      <td>7</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>41998</th>\n      <td>6</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>41999</th>\n      <td>9</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n  </tbody>\n</table>\n<p>42000 rows × 785 columns</p>\n</div>"
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv(\"D://data//digit-recognizer//train.csv\")\n",
    "data  #785列特征值，太多了，需要降维"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:48:08.226815400Z",
     "start_time": "2024-01-12T13:48:04.417506600Z"
    }
   },
   "id": "452b23b280786354"
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "outputs": [
    {
     "data": {
      "text/plain": "(42000, 785)"
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.shape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:06:47.429622300Z",
     "start_time": "2023-12-26T15:06:47.414570700Z"
    }
   },
   "id": "e00821eac8640bd9"
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "outputs": [
    {
     "data": {
      "text/plain": "array(['pixel0', 'pixel1', 'pixel2', 'pixel3', 'pixel4', 'pixel5',\n       'pixel6', 'pixel7', 'pixel8', 'pixel9', 'pixel10', 'pixel11',\n       'pixel12', 'pixel13', 'pixel14', 'pixel15', 'pixel16', 'pixel17',\n       'pixel18', 'pixel19', 'pixel20', 'pixel21', 'pixel22', 'pixel23',\n       'pixel24', 'pixel25', 'pixel26', 'pixel27', 'pixel28', 'pixel29',\n       'pixel30', 'pixel31', 'pixel32', 'pixel33', 'pixel34', 'pixel35',\n       'pixel36', 'pixel37', 'pixel38', 'pixel39', 'pixel40', 'pixel41',\n       'pixel42', 'pixel43', 'pixel44', 'pixel45', 'pixel46', 'pixel47',\n       'pixel48', 'pixel49', 'pixel50', 'pixel51', 'pixel52', 'pixel53',\n       'pixel54', 'pixel55', 'pixel56', 'pixel57', 'pixel58', 'pixel59',\n       'pixel60', 'pixel61', 'pixel62', 'pixel63', 'pixel64', 'pixel65',\n       'pixel66', 'pixel67', 'pixel68', 'pixel69', 'pixel70', 'pixel71',\n       'pixel72', 'pixel73', 'pixel74', 'pixel75', 'pixel76', 'pixel77',\n       'pixel78', 'pixel79', 'pixel80', 'pixel81', 'pixel82', 'pixel83',\n       'pixel84', 'pixel85', 'pixel86', 'pixel87', 'pixel88', 'pixel89',\n       'pixel90', 'pixel91', 'pixel92', 'pixel93', 'pixel94', 'pixel95',\n       'pixel96', 'pixel97', 'pixel98', 'pixel99', 'pixel100', 'pixel101',\n       'pixel102', 'pixel103', 'pixel104', 'pixel105', 'pixel106',\n       'pixel107', 'pixel108', 'pixel109', 'pixel110', 'pixel111',\n       'pixel112', 'pixel113', 'pixel114', 'pixel115', 'pixel116',\n       'pixel117', 'pixel118', 'pixel119', 'pixel120', 'pixel121',\n       'pixel122', 'pixel123', 'pixel124', 'pixel125', 'pixel126',\n       'pixel127', 'pixel128', 'pixel129', 'pixel130', 'pixel131',\n       'pixel132', 'pixel133', 'pixel134', 'pixel135', 'pixel136',\n       'pixel137', 'pixel138', 'pixel139', 'pixel140', 'pixel141',\n       'pixel142', 'pixel143', 'pixel144', 'pixel145', 'pixel146',\n       'pixel147', 'pixel148', 'pixel149', 'pixel150', 'pixel151',\n       'pixel152', 'pixel153', 'pixel154', 'pixel155', 'pixel156',\n       'pixel157', 'pixel158', 'pixel159', 'pixel160', 'pixel161',\n       'pixel162', 'pixel163', 'pixel164', 'pixel165', 'pixel166',\n       'pixel167', 'pixel168', 'pixel169', 'pixel170', 'pixel171',\n       'pixel172', 'pixel173', 'pixel174', 'pixel175', 'pixel176',\n       'pixel177', 'pixel178', 'pixel179', 'pixel180', 'pixel181',\n       'pixel182', 'pixel183', 'pixel184', 'pixel185', 'pixel186',\n       'pixel187', 'pixel188', 'pixel189', 'pixel190', 'pixel191',\n       'pixel192', 'pixel193', 'pixel194', 'pixel195', 'pixel196',\n       'pixel197', 'pixel198', 'pixel199', 'pixel200', 'pixel201',\n       'pixel202', 'pixel203', 'pixel204', 'pixel205', 'pixel206',\n       'pixel207', 'pixel208', 'pixel209', 'pixel210', 'pixel211',\n       'pixel212', 'pixel213', 'pixel214', 'pixel215', 'pixel216',\n       'pixel217', 'pixel218', 'pixel219', 'pixel220', 'pixel221',\n       'pixel222', 'pixel223', 'pixel224', 'pixel225', 'pixel226',\n       'pixel227', 'pixel228', 'pixel229', 'pixel230', 'pixel231',\n       'pixel232', 'pixel233', 'pixel234', 'pixel235', 'pixel236',\n       'pixel237', 'pixel238', 'pixel239', 'pixel240', 'pixel241',\n       'pixel242', 'pixel243', 'pixel244', 'pixel245', 'pixel246',\n       'pixel247', 'pixel248', 'pixel249', 'pixel250', 'pixel251',\n       'pixel252', 'pixel253', 'pixel254', 'pixel255', 'pixel256',\n       'pixel257', 'pixel258', 'pixel259', 'pixel260', 'pixel261',\n       'pixel262', 'pixel263', 'pixel264', 'pixel265', 'pixel266',\n       'pixel267', 'pixel268', 'pixel269', 'pixel270', 'pixel271',\n       'pixel272', 'pixel273', 'pixel274', 'pixel275', 'pixel276',\n       'pixel277', 'pixel278', 'pixel279', 'pixel280', 'pixel281',\n       'pixel282', 'pixel283', 'pixel284', 'pixel285', 'pixel286',\n       'pixel287', 'pixel288', 'pixel289', 'pixel290', 'pixel291',\n       'pixel292', 'pixel293', 'pixel294', 'pixel295', 'pixel296',\n       'pixel297', 'pixel298', 'pixel299', 'pixel300', 'pixel301',\n       'pixel302', 'pixel303', 'pixel304', 'pixel305', 'pixel306',\n       'pixel307', 'pixel308', 'pixel309', 'pixel310', 'pixel311',\n       'pixel312', 'pixel313', 'pixel314', 'pixel315', 'pixel316',\n       'pixel317', 'pixel318', 'pixel319', 'pixel320', 'pixel321',\n       'pixel322', 'pixel323', 'pixel324', 'pixel325', 'pixel326',\n       'pixel327', 'pixel328', 'pixel329', 'pixel330', 'pixel331',\n       'pixel332', 'pixel333', 'pixel334', 'pixel335', 'pixel336',\n       'pixel337', 'pixel338', 'pixel339', 'pixel340', 'pixel341',\n       'pixel342', 'pixel343', 'pixel344', 'pixel345', 'pixel346',\n       'pixel347', 'pixel348', 'pixel349', 'pixel350', 'pixel351',\n       'pixel352', 'pixel353', 'pixel354', 'pixel355', 'pixel356',\n       'pixel357', 'pixel358', 'pixel359', 'pixel360', 'pixel361',\n       'pixel362', 'pixel363', 'pixel364', 'pixel365', 'pixel366',\n       'pixel367', 'pixel368', 'pixel369', 'pixel370', 'pixel371',\n       'pixel372', 'pixel373', 'pixel374', 'pixel375', 'pixel376',\n       'pixel377', 'pixel378', 'pixel379', 'pixel380', 'pixel381',\n       'pixel382', 'pixel383', 'pixel384', 'pixel385', 'pixel386',\n       'pixel387', 'pixel388', 'pixel389', 'pixel390', 'pixel391',\n       'pixel392', 'pixel393', 'pixel394', 'pixel395', 'pixel396',\n       'pixel397', 'pixel398', 'pixel399', 'pixel400', 'pixel401',\n       'pixel402', 'pixel403', 'pixel404', 'pixel405', 'pixel406',\n       'pixel407', 'pixel408', 'pixel409', 'pixel410', 'pixel411',\n       'pixel412', 'pixel413', 'pixel414', 'pixel415', 'pixel416',\n       'pixel417', 'pixel418', 'pixel419', 'pixel420', 'pixel421',\n       'pixel422', 'pixel423', 'pixel424', 'pixel425', 'pixel426',\n       'pixel427', 'pixel428', 'pixel429', 'pixel430', 'pixel431',\n       'pixel432', 'pixel433', 'pixel434', 'pixel435', 'pixel436',\n       'pixel437', 'pixel438', 'pixel439', 'pixel440', 'pixel441',\n       'pixel442', 'pixel443', 'pixel444', 'pixel445', 'pixel446',\n       'pixel447', 'pixel448', 'pixel449', 'pixel450', 'pixel451',\n       'pixel452', 'pixel453', 'pixel454', 'pixel455', 'pixel456',\n       'pixel457', 'pixel458', 'pixel459', 'pixel460', 'pixel461',\n       'pixel462', 'pixel463', 'pixel464', 'pixel465', 'pixel466',\n       'pixel467', 'pixel468', 'pixel469', 'pixel470', 'pixel471',\n       'pixel472', 'pixel473', 'pixel474', 'pixel475', 'pixel476',\n       'pixel477', 'pixel478', 'pixel479', 'pixel480', 'pixel481',\n       'pixel482', 'pixel483', 'pixel484', 'pixel485', 'pixel486',\n       'pixel487', 'pixel488', 'pixel489', 'pixel490', 'pixel491',\n       'pixel492', 'pixel493', 'pixel494', 'pixel495', 'pixel496',\n       'pixel497', 'pixel498', 'pixel499', 'pixel500', 'pixel501',\n       'pixel502', 'pixel503', 'pixel504', 'pixel505', 'pixel506',\n       'pixel507', 'pixel508', 'pixel509', 'pixel510', 'pixel511',\n       'pixel512', 'pixel513', 'pixel514', 'pixel515', 'pixel516',\n       'pixel517', 'pixel518', 'pixel519', 'pixel520', 'pixel521',\n       'pixel522', 'pixel523', 'pixel524', 'pixel525', 'pixel526',\n       'pixel527', 'pixel528', 'pixel529', 'pixel530', 'pixel531',\n       'pixel532', 'pixel533', 'pixel534', 'pixel535', 'pixel536',\n       'pixel537', 'pixel538', 'pixel539', 'pixel540', 'pixel541',\n       'pixel542', 'pixel543', 'pixel544', 'pixel545', 'pixel546',\n       'pixel547', 'pixel548', 'pixel549', 'pixel550', 'pixel551',\n       'pixel552', 'pixel553', 'pixel554', 'pixel555', 'pixel556',\n       'pixel557', 'pixel558', 'pixel559', 'pixel560', 'pixel561',\n       'pixel562', 'pixel563', 'pixel564', 'pixel565', 'pixel566',\n       'pixel567', 'pixel568', 'pixel569', 'pixel570', 'pixel571',\n       'pixel572', 'pixel573', 'pixel574', 'pixel575', 'pixel576',\n       'pixel577', 'pixel578', 'pixel579', 'pixel580', 'pixel581',\n       'pixel582', 'pixel583', 'pixel584', 'pixel585', 'pixel586',\n       'pixel587', 'pixel588', 'pixel589', 'pixel590', 'pixel591',\n       'pixel592', 'pixel593', 'pixel594', 'pixel595', 'pixel596',\n       'pixel597', 'pixel598', 'pixel599', 'pixel600', 'pixel601',\n       'pixel602', 'pixel603', 'pixel604', 'pixel605', 'pixel606',\n       'pixel607', 'pixel608', 'pixel609', 'pixel610', 'pixel611',\n       'pixel612', 'pixel613', 'pixel614', 'pixel615', 'pixel616',\n       'pixel617', 'pixel618', 'pixel619', 'pixel620', 'pixel621',\n       'pixel622', 'pixel623', 'pixel624', 'pixel625', 'pixel626',\n       'pixel627', 'pixel628', 'pixel629', 'pixel630', 'pixel631',\n       'pixel632', 'pixel633', 'pixel634', 'pixel635', 'pixel636',\n       'pixel637', 'pixel638', 'pixel639', 'pixel640', 'pixel641',\n       'pixel642', 'pixel643', 'pixel644', 'pixel645', 'pixel646',\n       'pixel647', 'pixel648', 'pixel649', 'pixel650', 'pixel651',\n       'pixel652', 'pixel653', 'pixel654', 'pixel655', 'pixel656',\n       'pixel657', 'pixel658', 'pixel659', 'pixel660', 'pixel661',\n       'pixel662', 'pixel663', 'pixel664', 'pixel665', 'pixel666',\n       'pixel667', 'pixel668', 'pixel669', 'pixel670', 'pixel671',\n       'pixel672', 'pixel673', 'pixel674', 'pixel675', 'pixel676',\n       'pixel677', 'pixel678', 'pixel679', 'pixel680', 'pixel681',\n       'pixel682', 'pixel683', 'pixel684', 'pixel685', 'pixel686',\n       'pixel687', 'pixel688', 'pixel689', 'pixel690', 'pixel691',\n       'pixel692', 'pixel693', 'pixel694', 'pixel695', 'pixel696',\n       'pixel697', 'pixel698', 'pixel699', 'pixel700', 'pixel701',\n       'pixel702', 'pixel703', 'pixel704', 'pixel705', 'pixel706',\n       'pixel707', 'pixel708', 'pixel709', 'pixel710', 'pixel711',\n       'pixel712', 'pixel713', 'pixel714', 'pixel715', 'pixel716',\n       'pixel717', 'pixel718', 'pixel719', 'pixel720', 'pixel721',\n       'pixel722', 'pixel723', 'pixel724', 'pixel725', 'pixel726',\n       'pixel727', 'pixel728', 'pixel729', 'pixel730', 'pixel731',\n       'pixel732', 'pixel733', 'pixel734', 'pixel735', 'pixel736',\n       'pixel737', 'pixel738', 'pixel739', 'pixel740', 'pixel741',\n       'pixel742', 'pixel743', 'pixel744', 'pixel745', 'pixel746',\n       'pixel747', 'pixel748', 'pixel749', 'pixel750', 'pixel751',\n       'pixel752', 'pixel753', 'pixel754', 'pixel755', 'pixel756',\n       'pixel757', 'pixel758', 'pixel759', 'pixel760', 'pixel761',\n       'pixel762', 'pixel763', 'pixel764', 'pixel765', 'pixel766',\n       'pixel767', 'pixel768', 'pixel769', 'pixel770', 'pixel771',\n       'pixel772', 'pixel773', 'pixel774', 'pixel775', 'pixel776',\n       'pixel777', 'pixel778', 'pixel779', 'pixel780', 'pixel781',\n       'pixel782', 'pixel783'], dtype='<U8')"
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 笨方法\n",
    "cols = np.array([\"pixel\" + str(i) for i in range(784)])\n",
    "cols"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:06:47.444311400Z",
     "start_time": "2023-12-26T15:06:47.424620600Z"
    }
   },
   "id": "f88175d1505abd6c"
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "data": {
      "text/plain": "(42000, 784)"
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# train_image = data.loc[:, cols]\n",
    "train_image = data.iloc[:, 1:]\n",
    "\n",
    "train_image.shape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:48:15.858166200Z",
     "start_time": "2024-01-12T13:48:15.840136900Z"
    }
   },
   "id": "d452aa5f338fb39b"
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "data": {
      "text/plain": "(42000, 784)"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 确定特征值\n",
    "train_image = data.iloc[:, 1:]\n",
    "train_image.shape"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:48:19.979197Z",
     "start_time": "2024-01-12T13:48:19.949445300Z"
    }
   },
   "id": "63ee83f4c282dfe2"
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "data": {
      "text/plain": "0        1\n1        0\n2        1\n3        4\n4        0\n        ..\n41995    0\n41996    1\n41997    7\n41998    6\n41999    9\nName: label, Length: 42000, dtype: int64"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 确定目标值\n",
    "train_label = data.iloc[:, 0]\n",
    "train_label"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:48:23.006911800Z",
     "start_time": "2024-01-12T13:48:22.964011200Z"
    }
   },
   "id": "969f920bb3297fd1"
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 根据题目查看图像"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "2430e5773231e4dc"
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "outputs": [],
   "source": [
    "num = train_image.iloc[0,].values.reshape(28, 28)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:06:47.655561100Z",
     "start_time": "2023-12-26T15:06:47.650559700Z"
    }
   },
   "id": "3b3ea36ec94581ad"
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0,   0, 188, 255,  94,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0, 191, 250, 253,  93,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0, 123, 248, 253, 167,  10,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,  80, 247, 253, 208,  13,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,  29, 207, 253, 235,  77,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,  54, 209, 253, 253,  88,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,  93, 254, 253, 238, 170,  17,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n         23, 210, 254, 253, 159,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  16,\n        209, 253, 254, 240,  81,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  27,\n        253, 253, 254,  13,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  20, 206,\n        254, 254, 198,   7,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 168, 253,\n        253, 196,   7,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  20, 203, 253,\n        248,  76,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,  22, 188, 253, 245,\n         93,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0, 103, 253, 253, 191,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,  89, 240, 253, 195,  25,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,  15, 220, 253, 253,  80,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,  94, 253, 253, 253,  94,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,  89, 251, 253, 250, 131,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0, 214, 218,  95,   0,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0],\n       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,\n          0,   0]], dtype=int64)"
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num  #貌似是1"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:06:47.740959800Z",
     "start_time": "2023-12-26T15:06:47.655561100Z"
    }
   },
   "id": "e6f4a0ec0dcc1e5f"
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(num)\n",
    "plt.axis(\"off\")\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:06:47.772377700Z",
     "start_time": "2023-12-26T15:06:47.668001200Z"
    }
   },
   "id": "c65492463339ef07"
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 提取函数"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "f81ee5ab79ab570a"
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "outputs": [],
   "source": [
    "def toPlot(n):\n",
    "    \"\"\"\n",
    "    显示第n行的手写数字\n",
    "    :param n: 第n行，从0开始\n",
    "    :return: \n",
    "    \"\"\"\n",
    "    num = train_image.iloc[n,].values.reshape(28, 28)\n",
    "    plt.imshow(num)\n",
    "    plt.axis(\"off\")\n",
    "    plt.show()\n",
    "    return"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:06:47.773377Z",
     "start_time": "2023-12-26T15:06:47.755765100Z"
    }
   },
   "id": "96e3b3610bc51500"
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "toPlot(40)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:06:47.849864200Z",
     "start_time": "2023-12-26T15:06:47.765381600Z"
    }
   },
   "id": "616d2551a4123e73"
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 数据处理 "
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "b9edf35ea1947251"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 2.1对数据特征值归一化处理"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "3bd52e447c828f9d"
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 0.],\n       ...,\n       [0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 0.],\n       [0., 0., 0., ..., 0., 0., 0.]])"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_image = train_image.values / 255\n",
    "train_image"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:48:50.438277800Z",
     "start_time": "2024-01-12T13:48:50.250562200Z"
    }
   },
   "id": "c0e752739c8f6008"
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [
    {
     "data": {
      "text/plain": "array([1, 0, 1, ..., 7, 6, 9], dtype=int64)"
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_label = train_label.values\n",
    "train_label"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:49:00.442772200Z",
     "start_time": "2024-01-12T13:49:00.426772900Z"
    }
   },
   "id": "c7fed8d0e755dd93"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 2.2分割数据集"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "ab9cfafbd99a50d3"
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [],
   "source": [
    "x_train, x_val, y_train, y_val = train_test_split(train_image, train_label, train_size=0.8, random_state=0)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:49:05.727345400Z",
     "start_time": "2024-01-12T13:49:04.488663Z"
    }
   },
   "id": "a7093ec26fcd3510"
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(33600, 784) (8400, 784) (33600,) (8400,)\n"
     ]
    }
   ],
   "source": [
    "print(x_train.shape, x_val.shape, y_train.shape, y_val.shape)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-12T13:49:28.395569200Z",
     "start_time": "2024-01-12T13:49:28.374577600Z"
    }
   },
   "id": "101e2788597efb3"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 3 特征降维 & 模型训练"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "25dd2b5c20e42157"
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "outputs": [],
   "source": [
    "## 多次使用pca，确定最后的最优模型\n",
    "import time\n",
    "from sklearn.decomposition import PCA\n",
    "def n_components_analysis(n, x_train, x_val, y_train, y_val):\n",
    "    start = time.time()\n",
    "    # pca降维\n",
    "    pca =PCA(n_components=n)\n",
    "    pca.fit(x_train)\n",
    "\n",
    "    # 在训练集和测试集进行降维\n",
    "    x_train_pca = pca.transform((x_train))\n",
    "    x_val_pca = pca.transform(x_val)\n",
    "    \n",
    "    # 利用svc进行训练\n",
    "    ss = svm.SVC()\n",
    "    ss.fit(x_train_pca,y_train)\n",
    "    \n",
    "    # 获取accuracy结果\n",
    "    accuracy = ss.score(x_val_pca,y_val)\n",
    "    \n",
    "    #记录时间\n",
    "    end = time.time()\n",
    "    print(\"准确率：{}，耗时：{}s\".format(accuracy,int(end-start)))\n",
    "    \n",
    "    return accuracy \n",
    "    \n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:39:48.712010300Z",
     "start_time": "2023-12-26T15:39:48.669577Z"
    }
   },
   "id": "3494c862518dfc7f"
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "准确率：0.9785714285714285，耗时：26s\n",
      "准确率：0.9783333333333334，耗时：28s\n",
      "准确率：0.979047619047619，耗时：29s\n",
      "准确率：0.9797619047619047，耗时：29s\n",
      "准确率：0.9803571428571428，耗时：31s\n"
     ]
    }
   ],
   "source": [
    "# 传递多个n_components，寻找合理的n_components\n",
    "n_s = np.linspace(0.75,0.85,num=5)\n",
    "accuracy = []\n",
    "for n in n_s:\n",
    "    tmp = n_components_analysis(n,x_train,x_val,y_train,y_val)\n",
    "    accuracy.append(tmp)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:42:19.006772100Z",
     "start_time": "2023-12-26T15:39:52.582450900Z"
    }
   },
   "id": "b204fb22a8a3be28"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 准确率可视化"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "76f399502d2693fa"
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "outputs": [
    {
     "data": {
      "text/plain": "[<matplotlib.lines.Line2D at 0x16baadfce90>]"
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(n_s,np.array(accuracy))\n",
    "# 通过图，综合考虑，0.8最优"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T15:44:45.354953900Z",
     "start_time": "2023-12-26T15:44:45.099262500Z"
    }
   },
   "id": "9600e8ae76d639bd"
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 4.确定最优模型"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "6624d3fd03800db3"
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "outputs": [
    {
     "data": {
      "text/plain": "43"
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 确定最优值后重新训练最优模型\n",
    "pca = PCA(n_components=0.80)\n",
    "pca.fit(x_train)\n",
    "pca.n_components_ # 查看降维剩下多少个属性:43"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T16:00:36.453766600Z",
     "start_time": "2023-12-26T16:00:32.592108600Z"
    }
   },
   "id": "5b16dd240826cb70"
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "outputs": [
    {
     "data": {
      "text/plain": "0.3470238095238095"
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train_pca = pca.transform(x_train)\n",
    "x_val_pca = pca.transform(x_val)\n",
    "# x_train_pca = pca.fit_transform(x_train)\n",
    "# x_val_pca =pca.fit_transform(x_val)\n",
    "\n",
    "# SVM训练\n",
    "ss = svm.SVC()\n",
    "ss.fit(x_train_pca,y_train)\n",
    "\n",
    "ss.score(x_val_pca,y_val)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-12-26T16:01:07.820575300Z",
     "start_time": "2023-12-26T16:00:41.164377Z"
    }
   },
   "id": "2136d38f16deaaae"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "cb64d6040af1cf3b"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
